package br.com.infnet.formularioeletronico.modelo;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "avaliacao")
public class Avaliacao implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "avaliacaoSeq")
    @SequenceGenerator(name = "avaliacaoSeq", sequenceName = "seq_avaliacao", allocationSize = 1)
    @Column(name = "id_avaliacao")
    private Long id;
    @Basic(optional = false)
    @Column(name = "codigo")
    private String codigo;
    @Column(name = "data_inicio")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataInicio;
    @Column(name = "data_fim")
    @Temporal(TemporalType.TIMESTAMP)
    private Date dataFim;
    @Column(name = "objetivo")
    private String objetivo;
    @Column(name = "assunto")
    private String assunto;
    @Column(name = "mensagem")
    private String mensagem;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "avaliacao")
    private List<Questao> questoes;
    @JoinColumn(name = "id_turma", referencedColumnName = "id_turma")
    @OneToOne(optional = false)
    private Turma turma;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "avaliacao")
    private List<Responde> respostas;

    public Avaliacao(Long lngIdAvaliacao, Turma objTurma, String strCodigo, Date dtDataInicio, Date dtDataFim, String strObjetivo, String strAssunto, String strMensagem) {
    	
    	this.id = lngIdAvaliacao;
    	this.turma = objTurma;
    	this.codigo = strCodigo;
    	this.dataInicio = dtDataInicio;
    	this.dataFim = dtDataFim;
    	this.objetivo = strObjetivo;
    	this.assunto = strAssunto;
    	this.mensagem = strMensagem;
    }

    public Avaliacao(Turma objTurma, String strCodigo, Date dtDataInicio, Date dtDataFim, String strObjetivo, String strAssunto, String strMensagem) {
    	
    	this.turma = objTurma;
    	this.codigo = strCodigo;
    	this.dataInicio = dtDataInicio;
    	this.dataFim = dtDataFim;
    	this.objetivo = strObjetivo;
    	this.assunto = strAssunto;
    	this.mensagem = strMensagem;
    }
    
    public Avaliacao() {
    	
    }
    
    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public Date getDataFim() {
        return dataFim;
    }

    public void setDataFim(Date dataFim) {
        this.dataFim = dataFim;
    }

    public Date getDataInicio() {
        return dataInicio;
    }

    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Turma getTurma() {
        return turma;
    }

    public void setTurma(Turma turma) {
        this.turma = turma;
    }

    public List<Questao> getQuestoes() {
        return questoes;
    }

    public void setQuestoes(List<Questao> questoes) {
        this.questoes = questoes;
    }

    public String getAssunto() {
        return assunto;
    }

    public void setAssunto(String assunto) {
        this.assunto = assunto;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public String getObjetivo() {
        return objetivo;
    }

    public void setObjetivo(String objetivo) {
        this.objetivo = objetivo;
    }

    public List<Responde> getRespostas() {
        return respostas;
    }

    public void setRespostas(List<Responde> respostas) {
        this.respostas = respostas;
    }
    
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Avaliacao)) {
            return false;
        }
        Avaliacao other = (Avaliacao) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.com.infnet.formularioeletronico.modelo.Avaliacao[ id=" + id + " ]";
    }
}
